package cn.laoma.thread5.t5_003_Concurrent_Container;

import lombok.SneakyThrows;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @program: ThreadDemos
 * @description: 有界阻塞队列，当容器满的时候程序会在put方法阻塞
 * @author: 老马
 * @create: 2021-10-02 16:47
 **/
public class T05_ArrayBlockingQueue {
    //有界的阻塞队列。当容器满的时候程序会在put方法阻塞
    static BlockingQueue<String> queue = new ArrayBlockingQueue<String>(10);

    @SneakyThrows
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            queue.put("馒头" + i);
        }
        //这里看put的阻塞
        queue.put("馒头11");

        //这里看add报异常
//        queue.add("馒头11");
//
//        //这里看offer不报异常，但是有返回值
//        boolean offer11 = queue.offer("馒头11");
//        System.out.println(offer11);
//
//        //offer在加元素的时候可以设置尝试添加时间，如果指定时间内没有加入，那么返回false
//        boolean offer12 = queue.offer("馒头12", 1, TimeUnit.SECONDS);
//        System.out.println(offer12);
    }
}
